为了账号安全,请及时绑定邮箱和手机立即绑定

最近,在做地图相关的应用,请问有没有可行的办法实现?

最近,在做地图相关的应用,请问有没有可行的办法实现?

繁花如伊 2023-04-14 18:14:26
有大量的用户数据是ip地址,如果把用户标记在地图上,需要把ip地址转换为经纬度坐标。
查看完整描述

2 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

无意义。ip地址转换过来是城市信息。城市信息得到的经纬度是地区行政规划中心点。

查看完整回答
反对 回复 2023-04-17
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

我曾经做过一个类似的事情,使用的方案比较折腾:

  • Nginx 有 geoip 的模块,检查安装的 Nginx 是否编译了这个模块。

nginx -V

nginx version: nginx/1.1.19TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-auth-pam --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-upstream-fair --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-dav-ext-module

如果是没有重新编译一个带 geoip 模块的 Nginx 使用。

  • Nginx 的配置文件配置 geoip 的数据库,geoip 的数据库有收费的,也有免费的下载,我都是用免费的,经常更新一下即可。

http {
        geoip_country  /etc/nginx/GeoIP.dat;
        geoip_city     /etc/nginx/GeoLiteCity.dat;
}
  • GEO 的信息就可以通过fastcgi的参数传递给应用了,以下是Django的一段 fastcgi 配置示例。

#GeoIPfastcgi_param GEOIP_COUNTRY_CODE $geoip_city_country_code;fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;fastcgi_param GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;fastcgi_param GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;fastcgi_param GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;fastcgi_param GEOIP_REGION $geoip_region;fastcgi_param GEOIP_CITY $geoip_city;fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;fastcgi_param GEOIP_LAT $geoip_latitude;fastcgi_param GEOIP_LNG $geoip_longitude;
  • Django 把得到的经纬度通过 Ajax 传递到前台,交给 Google Map API 显示即可。如果是国内的 IP 可能就不准确,我用了纯真IP的数据库,方法 Google 一下有很多。

这个方法的限定是使用 Nginx + fastcgi,不是适合所有的人。


查看完整回答
反对 回复 2023-04-17
  • 2 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信