传单地理搜索 - 从传单地图容器外部搜索位置
leaflet geosearch - search for location from outside of leaflet map container
我希望能够让我的地图以预先输入的位置为中心。例如:
第 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
});
以上代码return错误:
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 请求,并且能够轻松地在页面之间传递变量。问题是我无法使用给定的查询在传单地图之外调用地理搜索并使其 return 我需要重新居中地图的坐标。
不幸的是,您不能简单地将 JavaScript 变量的值从一个页面传递到另一个页面。您需要使用 "persistent" 存储,以便下一页可以读取并执行操作(例如将视图设置为先前用户提供的位置并根据需要进行缩放)。
2 种简单的方法是:
- 配合浏览器地址栏,通常使用hash/fragment部分。请参阅插件 Leaflet.RestoreView。
- 使用浏览器HTML5 localStotarge。请参阅插件 Leaflet-hash。
你也可以试试other Leaflet plugins.
您也可以尝试实现您自己的方法 1 版本,这样您就可以将 "location" 作为您的地理编码提供程序对象可以管理的字符串直接传递,而不是坐标(与第二个方法一样)例如插件)。它可以写在 hash or the query part 中。有许多小型 JavaScript 库可以帮助您。
方法 1 的优点是您实际上可以将 link 用作 permalink 到直接指向正确的位置!
编辑:
要在地址栏中检索 URL 的哈希部分(方法 1),请参阅 that post。
由于您标记了 jQuery,您可以将其用于 store / retrieve data in localStorage(方法 2)。
我通过自定义 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();
如果有人有更好的解决方案,请告诉我! (例如以某种方式在地图对象中调用地理搜索功能)
我希望能够让我的地图以预先输入的位置为中心。例如:
第 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
});
以上代码return错误:
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 请求,并且能够轻松地在页面之间传递变量。问题是我无法使用给定的查询在传单地图之外调用地理搜索并使其 return 我需要重新居中地图的坐标。
不幸的是,您不能简单地将 JavaScript 变量的值从一个页面传递到另一个页面。您需要使用 "persistent" 存储,以便下一页可以读取并执行操作(例如将视图设置为先前用户提供的位置并根据需要进行缩放)。
2 种简单的方法是:
- 配合浏览器地址栏,通常使用hash/fragment部分。请参阅插件 Leaflet.RestoreView。
- 使用浏览器HTML5 localStotarge。请参阅插件 Leaflet-hash。
你也可以试试other Leaflet plugins.
您也可以尝试实现您自己的方法 1 版本,这样您就可以将 "location" 作为您的地理编码提供程序对象可以管理的字符串直接传递,而不是坐标(与第二个方法一样)例如插件)。它可以写在 hash or the query part 中。有许多小型 JavaScript 库可以帮助您。
方法 1 的优点是您实际上可以将 link 用作 permalink 到直接指向正确的位置!
编辑:
要在地址栏中检索 URL 的哈希部分(方法 1),请参阅 that post。
由于您标记了 jQuery,您可以将其用于 store / retrieve data in localStorage(方法 2)。
我通过自定义 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();
如果有人有更好的解决方案,请告诉我! (例如以某种方式在地图对象中调用地理搜索功能)