所以我正在制作一项服务,搜索特定的标签,然后尝试将这些推文的来源放在地图上。
有三种方法可以确定位置。一种是对地理位置数据进行反向查找,该数据仅在推特的一小部分(<10%)上可用。第二个是在推文中查找指定位置的标签,第三个是查看用户档案。
我目前遇到的问题是第二个。我提取推文和缓存结果没有问题,但结果目前非常模糊,因为谷歌是一个很好的搜索引擎。例如,如果我搜索"followme"(显然无意被解释为地址),谷歌就会在澳大利亚维多利亚州找到一条名为"followme"的街道。
基本上,我想做的只是在城镇或城市层面进行搜索,以减少误报的数量。但我一直找不到任何可以帮助我的文件。
编辑:或者,是否有支持此类功能的地图提供商?
编辑2:响应代码请求和更多解释。
代码可能不完整,没有太大帮助。你真正需要知道的是:
- 它像在cron中一样运行,目的是填充数据库
- 它将查询twitter API,查找特定的标签
- 如果它找不到任何地理位置数据(需要用户专门启用)来对地址进行反向查找,那么它就只能依靠推文正文中的标签了
- 我将过滤该数据以删除重复项,并忽略数据库中已经存在的任何术语
- 在剩下的项目上,我需要对这些标签(格式化为术语列表)进行地址搜索,看看其中是否有与城镇或城市名称匹配的标签如果我只是直接搜索,那么我会得到一大堆误报
http://pastebin.com/HX2vt0Mh
以假阳性为例。如果我输入源自标签"#followme"的"followme,Lysterfield VIC 3156,Australia"。如果我将搜索限制在城镇级别,那么假阳性应该会降到可接受的水平。
您可以看到:
-
Geocoder
-
并通过GeocodingAddressTypes 过滤GeocodeResult
考虑以下示例(并查看Chrome的控制台):
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Geocoding service</title>
<style>
html, body, #map-canvas { height: 100%; min-height: 600px; min-width: 700px; margin: 0px; padding: 0px }
#panel { position: absolute; top: 5px; left: 50%; margin-left: -180px; z-index: 5; background-color: #fff; padding: 5px; border: 1px solid #999; }
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
</head>
<body>
<div id="panel">
<input id="address" type="textbox" value="followme">
<input type="button" value="Geocode" onclick="codeAddress()">
</div>
<div id="map-canvas"></div>
<script>
var geocoder;
var map;
var filterTypes = ["country", "administrative_area_level_1", "administrative_area_level_2", "administrative_area_level_3", "locality"];
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(-34.397, 150.644);
var mapOptions = {
zoom: 8,
center: latlng
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
}
function codeAddress() {
var address = document.getElementById('address').value;
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
for (var i = 0;i < results.length; i++) {
var resultTypes = results[i].types;
for (var j = 0; j < resultTypes.length; j++) {
for (var type in filterTypes) {
if (filterTypes[type] == resultTypes[j]) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
//draggable: true,
position: results[0].geometry.location
});
console.log("The result is of good type");
}
console.log(resultTypes[j]);
}
}
}
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</body>
</html>
作为另一个选项,你可以看看这个:
放置
文本搜索请求
并按supported_types#table2 过滤PlaceResult