我希望能够将我的地图置于预先输入的位置。例如:
第1页:用户提交位置并重定向到第2页
第2页:从第1页获取输入,并根据位置获取中心地图
假设第1页的输入已保存到变量' location',我已尝试过:
<script src="/static/js/leaflet.js" type="text/javascript"></script>
<script src="/static/js/l.control.geosearch.js" type="text/javascript"></script>
<script src="/static/js/l.geosearch.provider.google.js" type="text/javascript"></script>
<script type="text/javascript">
var googleGeocodeProvider = new L.GeoSearch.Provider.Google();
var map = L.map('map', {center: [30.27, -97.75], zoom: 10, maxZoom: 18, minZoom: 3});
L.tileLayer(''http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'}).addTo(map);
var geosearch = new L.Control.GeoSearch({
provider: googleGeocodeProvider
}).addTo(map);
googleGeocodeProvider.GetLocations(location, function (data) {
console.log(data); # according to docs (https://github.com/smeijer/L.GeoSearch), data should have the x,y info I'm looking for
});
上面的代码返回错误:
Uncaught TypeError: Cannot read property 'geocode' of undefinedL.GeoSearch.Provider.Google.L.Class.extend.GetLocations @ l.geosearch.provider.google.js:39(anonymous function) @ (index):357
编辑:
对不起Ghybs,我应该更清楚我有这个问题。我正在使用django来处理Web请求,并且我能够轻松地在页面之间传递变量。问题是我无法使用给定的查询在传单地图之外调用geosearch,并让它返回我需要重新居中地图的坐标。
答案 0 :(得分:0)
很遗憾,您无法简单地将JavaScript变量的值从一个页面传递到另一个页面。您需要使用“持久性”存储,下一页可以读取并执行操作(例如将视图设置为以前用户提供的位置并根据需要进行缩放)。
这样做的两种简单方法是:
您也可以尝试other Leaflet plugins。
您还可以尝试实现自己的方法1版本,以便将“位置”直接作为地理编码提供程序对象可以管理的字符串传递,而不是坐标(例如,使用第二个插件完成) 。它可以写在hash or the query part中。有许多小型JavaScript库可以帮助您。
方法1的好处在于,您实际上可以将链接用作永久链接到第二页,直接指向正确的位置!
编辑:
要检索位置栏中的网址的哈希部分(方法1),请参阅that post。
由于您标记了jQuery,因此可以将其用于store / retrieve data in localStorage(方法2)。
答案 1 :(得分:0)
我通过自定义l.geosearch.provider.google.js脚本解决了我得到的错误,替换:
var geocoder = L.GeoSearch.Provider.Google.Geocoder;
使用:
var geocoder;
if (L.GeoSearch.Provider.Google.Geocoder)
geocoder = L.GeoSearch.Provider.Google.Geocoder;
else
geocoder = new google.maps.Geocoder();
如果有人有更好的解决方案,请告诉我! (例如以某种方式在地图对象中调用geosearch函数)