我需要使用.Net对地址进行地理编码(从地址获取lat/long),以存储在数据库中.
要完成这项工作的库/项目是什么?
经过搜索,在谷歌和codeplex.com上,我发现有一些选项,看起来他们会做我要求的......但其中一些可能是垃圾和浪费时间 - 和一些可能只是一流的.
哪一个是最适合的?你用过它们了吗?
我可以使用MySQL的MaxMind GeoIP国家/城市的开源替代品吗?
我只想找到一个简单的C#类,它接收起始纬度和经度以及距离并找到边界框(max lat,min lat,max lon,min lon).在这里还有其他类似的问题,但是没有一个真正回答这个问题,那些问题不在C#中.
救命.
如果我正在搜索商业地点,Geocoder getFromLocationName不返回任何内容.以下是我到目前为止的发现:
我已经在拥有Google地图的1.6,2.1和2.2设备上进行了测试.
我试图找出SDK上某处是否有限制解释,但除了:
反向地理编码位置描述中的详细信息量可能会有所不同,例如,一个可能包含最近建筑物的完整街道地址,而另一个可能只包含城市名称和邮政编码.Geocoder类需要一个未包含在核心android框架中的后端服务.如果平台中没有后端服务,Geocoder查询方法将返回一个空列表(http://developer.android.com/reference/android/location/Geocoder.html)
[更新] 因此经过一夜的研究,我似乎无法使其发挥作用 - 谷歌根本不会给我结果.关于android-developers的一些讨论指出了一个事实,即当Google Navigation出现时,getFromBusinessName被省略了.所以我开始假设谷歌正在撤回一些地理编码服务.
我总是可以创建一个使用Google Geocoder API的网页,但其限制为2500 api电话 - 而且我认为这不合法(lol).那么我的替代方案是什么?
我在我的城市有一个区域名称列表,我需要Lat和Long相同的名称.
有什么服务可以使用获取数据吗?
我不想使用任何地图.我想做简单的api调用,并通过json或xml获取lat long.
问题:
我正在尝试使用Google Maps API V3将lat/long地理编码到最近的街道交叉口.此外,目前,这不一定非常准确 - 因为我只是试图匿名地址而不是提供方向.
我已经看到地理编码结果数据包含地址组件类型 "交叉点",但这在返回结果中似乎并不一致 - 并且通常不是空白.
我还做了一些关于SO的最佳方法,以便直接从Google获取它,并且我最接近的是:如何通过Google Maps API找到最近的交叉点?,这并没有真正解决我的问题.鉴于此,我提出了自己的解决方案,并希望完全有一些意见,优化,建设性批评或其他选择.
我的暂定解决方案:
在使用API之后,我决定给出以下算法(仅用于上下文,这是在控制台应用程序中用C#编写的):
我拿一个地址并将其解析为lat/long.
然后我在坐标中添加或减去一定数量的纬度或长度 - 按照城市街区的顺序(根据纬度调整的距离)并获得点之间的行走方向.我这样做是为了所有四个方向 - 所以第一个修改是保持纬度相同但减去一些经度.然后下一个修改是保持纬度并增加一些经度等.
获得指示后,我解析结果并检查开始和结束地址.如果它们不同,我会将街道名称拉出来并将它们视为一个"交叉点"(尽管有时这会产生平行的街道 - 再次只是试图得到一个球场).
如果我找不到两条不同的街道,我会扩大最终目的地的距离并重复此过程.
到目前为止,这种方法运行良好,但显然它在时间和使用我分配的查询限制方面都是一个昂贵的过程.此外,我检查了API服务条款,只要我在其中包含免责声明并在Google地图上显示结果,我认为我没问题.
我对社区的问题是:
如何提高算法的效率?具体来说,我调用API的次数(实现代码不是问题)
还有另外一种方法可以使用Google Maps API完成此操作吗?在上面提到的SO问题中,解决方案是循环建筑数量.我不确定究竟是什么意思 - 所以任何澄清都会很棒.
如上所述,我不相信这违反了服务条款 - 但我错了吗?
是否有其他基于Web的API可以更好地满足我的需求?也许Bing,或其他一些提供商?
非常感谢您的帮助.
更新: 我已经遇到了当天的查询限制,因此我今天无法测试任何针对Google的建议,但我仍然愿意使用不同的API.谢谢.
因此,当我导入记录时,我正在编写一个缓存地理编码数据的应用程序.当我使用未签名的请求时,我的工作正常,但是当我尝试使用我公司的clientid和签名时,我似乎无法弄清楚出了什么问题.我总是得到一个403 Forbidden.
这是我的URL构建器:
private const string _googleUri = "http://maps.googleapis.com/maps/api/geocode/xml?address=";
private const string _googleClientId = "XXXXXXXX";
private const string _googleSignature = "XXXXXXXXXXXXXXXXXXXXXXXX";
//RESOLVED
private static String GetGeocodeUri(string address)
{
ASCIIEncoding encoding = new ASCIIEncoding();
string url = String.Format("{0}{1}&client={2}&sensor=false"
, _googleUri
, HttpUtility.UrlEncode(address)
, _googleClientId);
// converting key to bytes will throw an exception, need to replace '-' and '_' characters first.
string usablePrivateKey = _googleSignature.Replace("-", "+").Replace("_", "/");
byte[] privateKeyBytes = Convert.FromBase64String(usablePrivateKey);
Uri uri = new Uri(url);
byte[] encodedPathAndQueryBytes = encoding.GetBytes( uri.LocalPath …Run Code Online (Sandbox Code Playgroud) 我一直在使用Google地理编码API使用以下网址返回地点的坐标:http: //maps.googleapis.com/maps/api/geocode/json?address = Saints%20Peter%20&%20Paul%20Parish%204070 %20Central%20Parkway%20East,%20Mississauga,%20L4Z%201T6,+ CA&传感器=假
这个地方的地址是:
Saints Peter&Paul Parish,4070,Central Parkway East,Mississauga,L4Z 1T6.
在Google地图中搜索时,它会返回正确的位置,但是当使用上述网址获取JSON格式的坐标时,它会返回美国迈阿密的一些坐标,而我的地址位于加拿大的密西沙加.
这是在Google地图中搜索相同加法器时的实际位置:https://www.google.co.in/maps/preview#! q = Saints+Peter+%24+Paul+Parish%2C+204070%2C+Central +大道+东%2C +米西索加%2C + L4Z + 1T6和数据=!4m10!1M9!4M8!1立方米!1d126887!2d76.3082933!3d9.9822827!3平方米!1i1600!2i775!4f13.1
但返回的坐标是25.7598220,-80.2133820,这是在Maimi
google-maps geocoding google-maps-api-3 google-geocoder google-geocoding-api
如何在 google 或其他一些地理编码服务提供商上执行批量地理编码。我不想要批处理地址处理,其中应用程序使用 JavaScript 将地址批处理分解为循环中的单个地址,并像此处的示例提供程序一样执行地理编码 ( http://onemarco.com/2007/06/03/geocoding-with- the-google-maps-api/)。我想执行批量地理编码,我可以直接向服务提供商提交来自文件或文本的批量地址并获得合适的响应。
提前谢谢你。
谷歌地图(或任何其他提供商[商业/免费])是否提供可以返回地点搜索边界多边形坐标的 API?我不是在谈论 sw-ne 坐标,而是完美定义一个地方形状的实际边界。地点可以是城市,或更细粒度的可识别地点?
我对谷歌地图 API 了解不多,但我确实给了它相当多的搜索和测试示例代码(来自谷歌本身提供的示例),以及通过 API 参考浏览,但找不到任何。
任何帮助请...
geocoding ×10
google-maps ×6
.net ×2
c# ×2
android ×1
api ×1
geolocation ×1
maps ×1
mysql ×1
open-source ×1