在我的网站上,公司可以输入每个分支机构的位置(地址等)。与其每次我想在(谷歌)地图上显示它时都通过谷歌进行地理编码,不如在输入时简单地对每个地址进行地理编码,然后存储坐标以备后用。
然而,对于所有的法律术语,我很困惑这是否是常规做法,或者开发人员是否通常每次都进行动态地理编码?
我试图在MKMapView中加载一个地址,因为我使用了以下代码
CLLocationCoordinate2D location = [self getLocationFromAddressString:@"321 Iowa St, Fallbrook, CA 92028, United States US"];
MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta = 0.05;
span.longitudeDelta = 0.05;
region.span = span;
region.center = location;
[mapView setRegion:region animated:YES];
[mapView regionThatFits:region];
Run Code Online (Sandbox Code Playgroud)
以下是获取给定地址位置的代码
-(CLLocationCoordinate2D) getLocationFromAddressString:(NSString*) addressStr
{
NSString *urlStr = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv",
[addressStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSError *error = nil;
NSString *locationStr = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlStr] encoding:NSUTF8StringEncoding error:&error];
NSArray *items = [locationStr componentsSeparatedByString:@","];
double lat = 0.0;
double lon = 0.0;
if([items count] >= 4 && [[items objectAtIndex:0] isEqualToString:@"200"]) …Run Code Online (Sandbox Code Playgroud) 我正在改变如何将我的地图图像从Google maps api获取到使用OpenStreetMap Data的MapQuest托管的地图图块.我正在切换谷歌地图,因为我达到了我没想到的每日请求限制,我没有使用OpenStreet api,因为虽然他们的数据是免费的,但他们的图块有一个限制,我只需要一个图像.因此,我在这里使用MapQuest托管的地图图块.
我想我理解它,但有些事情我希望能够做但却找不到任何文件.例如,如果可能的话,我想要一个500x300的图像尺寸,或者至少512*512(这是瓷砖出来的双256*256).我还希望能够显示标记.这可能吗?
我使用此处的代码将我的纬度和经度数据转换为x和y坐标:
public class slippy {
public static void main(String[] args) {
int zoom = 9;
double lat = 42.8549;
double lon = -78.863;
System.out.println("http://otile1.mqcdn.com/tiles/1.0.0/map/" + getTileNumber(lat, lon, zoom) + ".png");
}
public static String getTileNumber(final double lat, final double lon, final int zoom) {
int xtile = (int)Math.floor( (lon + 180) / 360 * (1<<zoom) ) ;
int ytile = (int)Math.floor( (1 - Math.log(Math.tan(Math.toRadians(lat)) + 1 / Math.cos(Math.toRadians(lat))) / Math.PI) / 2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试将地址转换为受尊重的纬度和经度值,即地理编码。
从谷歌定义:
什么是地理编码?
地理编码是将地址(如“1600 Amphitheatre Parkway, Mountain View, CA”)转换为地理坐标(如纬度 37.423021 和经度 -122.083739)的过程,可用于放置标记或定位地图。
我正在使用 Swift 在 iOS 中尝试相同的方法。
我的代码工作正常。但是有些地址没有转换为 lat、lng 值。我确信我搜索的地址是 100% 有效的。
这是我的代码
override func viewDidLoad() {
super.viewDidLoad()
var address = "Kloten Airport, Switzerland" // This Address not working
var geocoder = CLGeocoder()
geocoder.geocodeAddressString(address, {(placemarks: [AnyObject]!, error: NSError!) -> Void in
if let placemark = placemarks?[0] as? CLPlacemark {
let title = ABCreateStringWithAddressDictionary(placemark.addressDictionary, false)
println(title);
let location = CLLocationCoordinate2D(
latitude: placemark.location.coordinate.latitude,
longitude: placemark.location.coordinate.longitude
)
}
})
}
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的地址来进行地理编码Houston USA …
我认为这是一个错误,我将查找将其提交给Google的位置,但我认为我会先在这里提出问题,以防万一我做错了什么或误解了某些内容。我无法让Google的地址解析器始终使用区域偏差。例如,以下方法确实有效:
https://maps.googleapis.com/maps/api/geocode/json?address=boston 返回马萨诸塞州波士顿https://maps.googleapis.com/maps/api/geocode/json?address=boston®ion=uk 返回英格兰林肯郡波士顿但是以下内容不起作用
https://maps.googleapis.com/maps/api/geocode/json?address=manchester 返回英国曼彻斯特https://maps.googleapis.com/maps/api/geocode/json?address=manchester®ion=us 仍返回英国曼彻斯特对于无区域请求,结果都未出现在波士顿,林肯郡和康涅狄格州的曼彻斯特,因此我认为它们应该发挥相同的作用。但是,请务必注意,它可能取决于手动区域输入。以下操作无法正常工作,并且都返回马萨诸塞州波士顿:
https://maps.googleapis.com/maps/api/geocode/json?address=boston®ion=ca 应该是安大略省的波士顿https://maps.googleapis.com/maps/api/geocode/json?address=boston®ion=us-ky 应该是肯塔基州波士顿@ dr-molle接受的答案是正确的。但是,您使用的是Google的JS API,因此无法指定components。您可以在中指定边界区域bounds。要找到边界,您需要LatLng一个矩形框的NE和SW点的对象。对于CT,我做了以下工作:
CT_NE_POINT = new google.maps.LatLng(42.05, -71.783333);
CT_SW_POINT = new google.maps.LatLng(40.966667, -73.733333);
CT_BOUNDS = new google.maps.LatLngBounds(CT_SW_POINT, CT_NE_POINT);
...
geocoder = new google.maps.Geocoder();
geocoder.geocode({address: 'manchester', bounds: CT_BOUNDS}, someCallbackFunction);
Run Code Online (Sandbox Code Playgroud)
componentRestrictionsJavaScript API确实接受一个componentRestrictions对象。您会看到文档未显示componentRestrictions在对象文字中,但确实在下面对其进行了描述(此处未提及它是对象)。上面第一次编辑中的代码可以简化为:
geocoder = new google.maps.Geocoder();
geocoder.geocode({
address: 'manchester',
componentRestrictions: { administrativeArea: 'CT' }
}, someCallbackFunction);
Run Code Online (Sandbox Code Playgroud) 当我尝试加载此代码时遇到问题,我不知道为什么它不起作用......
<script type="text/javascript">
$(document).ready(function()
{
var geocoder = new google.maps.Geocoder();
$(".textarea-autosize").autosize();
geocoder.geocode({
address: '{$order->address_delivery["address1"]},{$order->address_delivery["postecode"]},{$order->address_delivery["city"]}'
}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK)
{
var delivery_map = new google.maps.Map(document.getElementById('map-canvas'), {
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: results[0].geometry.location
});
var delivery_marker = new google.maps.Marker({
map: delivery_map,
position: results[0].geometry.location,
url: 'http://maps.google.com?q={$order->address_delivery["address1"]},{$order->address_delivery["postcode"]},{$order->address_delivery["city"]}'
});
google.maps.event.addListener(delivery_marker, 'click', function() {
window.open(delivery_marker.url);
});
}
});
});
// Fix wrong maps center when map is hidden
$('#tabAddresses').click(function(){
x = delivery_map.getZoom();
c = delivery_map.getCenter();
google.maps.event.trigger(delivery_map, 'resize');
delivery_map.setZoom(x);
delivery_map.setCenter(c);
});
</script>
Run Code Online (Sandbox Code Playgroud)
错误发生在 …
当用户点击谷歌地图上的某个点时,我会反向地理编码,如下所示:
geocoder.geocode({'location': latlng}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
if (results[1]) {
console.log(results[1]);
Run Code Online (Sandbox Code Playgroud)
在此阶段,结果[1]的控制台日志看起来像
Object {address_components: Array[4], formatted_address: "Rathmines, Co. Dublin, Ireland", geometry: Object, place_id: "ChIJN6MDC6kOZ0gRIhArCabX9o4", types: Array[2]}
Run Code Online (Sandbox Code Playgroud)
但是,当用户使用我弹出的地址点击infowindow时,我尝试将该对象传递给ng-click函数,如下所示:
ng-click='addressPicked("+results[1]+")'
Run Code Online (Sandbox Code Playgroud)
我收到了错误
Error: [$parse:syntax] Syntax Error: Token 'Object' is unexpected, expecting []]
at column 23 of the expression [addressPicked([object Object])] starting at [Object])].
Run Code Online (Sandbox Code Playgroud)
我在另一个应用程序中工作,但我只是通过一个lat&long字符串.
在尝试将对象作为参数传递之前,是否需要将对象转换为其他对象?
任何人在使用ng-click之前遇到此错误?
任何帮助将不胜感激,谢谢.
javascript google-maps geocoding angularjs angularjs-ng-click
晚上好.
目标:我正在尝试在运行Windows的计算机上使用RStudio内的RCPP构建基于纽约市城市规划部门Geosupport软件的批量地理编码软件包.除了坐标(包括建筑物识别号和人口普查地理位置)之外,Geosupport还返回了许多有用的信息.我认为这样的一揽子计划有可能对研究纽约市数据的研究人员和社区倡导者非常有用.
背景:Geosupport可在纽约DCP网站上免费下载.下载附带批量地理编码接口(称为GBAT).此外,还提供了头文件,数据和库文件,因此用户可以使用C,C++或VB构建的应用程序进行地理编码.库文件有一个DLL扩展,并用C编译(不是C++,我与其中一个开发人员核对).
状态:到目前为止,我已经能够包含头文件并设置工作区.当我尝试使用C库中的函数时遇到问题.我一直在阅读写作R扩展 - 使用Makevars,但我仍然不确定如何继续.我使用RStudio的Rtools和RCPP构建了我的包,并且没有生成makevars文件.我购买了Dirk的书(在与我类似的帖子中引用),但尚未到达.
谢谢!
格雷琴
更新代码... 05.03.2016 at 19:45 EST:Per Coatless的建议,我创建了一个GitHub存储库.我还创建了一个Makevars.win和Makevars文件,并将我的头文件重新定位到inst/include.标题工作正常,但我仍然不知道如何处理库.此外,驱动地理编码器的基础数据文件对于GitHub(1.85 GB)来说太大了.我将尝试使用家用计算机上的Git LFS添加它们.
我有32K行地址,我必须找到长/纬度值.
我正在使用此处找到的代码.我非常感谢这个人创造它,但我有一个问题:
我想编辑它,以便如果循环遇到当前行地址的问题,它只是在Lat/Long字段中表示NA并移动到下一个.有谁知道如何实现这一目标?代码如下:
# Geocoding a csv column of "addresses" in R
#load ggmap
library(ggmap)
# Select the file from the file chooser
fileToLoad <- file.choose(new = TRUE)
# Read in the CSV data and store it in a variable
origAddress <- read.csv(fileToLoad, stringsAsFactors = FALSE)
# Initialize the data frame
geocoded <- data.frame(stringsAsFactors = FALSE)
# Loop through the addresses to get the latitude and longitude of each address and add it to the
# origAddress data …Run Code Online (Sandbox Code Playgroud) 我有一个包含超过 6k 个地址条目的数据库,因此我已经安装了带有 docker 的 nominatim 服务器来进行地理编码工作。它在“localhost:8080”上的 Web 表单中正常工作。
但是,当我尝试在 jupyter 中使用 geopy 进行查询时。它总是抛出错误。
我的 Jupyter 代码:
from geopy.geocoder import Nominatim
nom=Nominatim(domain='http://localhost:8080')
nom.geocode('some address') #the address works on the public server
Run Code Online (Sandbox Code Playgroud)
错误堆栈:
---------------------------------------------------------------------------
gaierror Traceback (most recent call last)
/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py in do_open(self, http_class, req, **http_conn_args)
1253 try:
-> 1254 h.request(req.get_method(), req.selector, req.data, headers)
1255 except OSError as err: # timeout error
/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py in request(self, method, url, body, headers)
1105 """Send a complete request to the server."""
-> 1106 self._send_request(method, url, …Run Code Online (Sandbox Code Playgroud)