我正在编写一个应用程序,当用户按下按钮时,该应用程序将在一个区域周围拍摄9张地图快照.
在循环中,使用它来移动和保存:
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(mStartLat + (mMultiOffsetX + mWidth), mStartLng + (mMultiOffsetY + mHeight)), mZoom));
map.snapshot(this);
Run Code Online (Sandbox Code Playgroud)
并在onSnapshotReady中:
final String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + String.format("/test_maps/map_%f_%f.png", Double.valueOf(mStartLat + (mMultiOffsetX * mWidth)), Double.valueOf(mStartLng + (mMultiOffsetY * mHeight)));
FileOutputStream fos = new FileOutputStream(new File(fileName));
bmp.compress(CompressFormat.PNG, 0, fos);
Run Code Online (Sandbox Code Playgroud)
不幸的是,在拍摄快照时,地图偶尔会完成加载,因此您最终得到:

那么,有没有办法在地图视图加载完成后检测或设置监听器?
我试图绘制德国的等值线图,显示各州的贫困率(受这个问题的启发).
问题是,有些州(例如柏林)完全被其他州(勃兰登堡州)所包围,而且我很难让ggplot认出勃兰登堡的"洞".
此示例的数据在此处.
library(rgdal)
library(ggplot2)
library(RColorBrewer)
map <- readOGR(dsn=".", layer="germany3")
pov <- read.csv("gerpoverty.csv")
mrg.df <- data.frame(id=rownames(map@data),ID_1=map@data$ID_1)
mrg.df <- merge(mrg.df,pov, by="ID_1")
map.df <- fortify(map)
map.df <- merge(map.df,mrg.df[,c("id","poverty")], by="id")
ggplot(map.df, aes(x=long, y=lat, group=group)) +
geom_polygon(aes(fill=poverty))+
geom_path(colour="grey50")+
scale_fill_gradientn(colours=brewer.pal(5,"OrRd"))+
labs(x="",y="")+ theme_bw()+
coord_fixed()
Run Code Online (Sandbox Code Playgroud)

请注意柏林和勃兰登堡(东北部)的颜色是如何相同的.他们不应该 - 柏林的贫困率远远低于勃兰登堡州.似乎ggplot正在渲染柏林多边形,然后在其上渲染勃兰登堡多边形,没有洞.
如果我geom_polygon(...)按照这里的建议改变呼叫,我可以修复柏林/勃兰登堡问题,但现在三个最北端的状态都被错误地渲染了.
ggplot(map.df, aes(x=long, y=lat, group=group)) +
geom_polygon(aes(group=poverty, fill=poverty))+
geom_path(colour="grey50")+
scale_fill_gradientn(colours=brewer.pal(5,"OrRd"))+
labs(x="",y="")+ theme_bw()+
coord_fixed()
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么??
我正在尝试使用为Android提供的最新Map API 2.0.我正在使用支持库,因为我想支持Android 2.2.以下是我的代码:
主要活动类
public class MainActivity extends FragmentActivity {
public FragmentManager fManager ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fManager = getSupportFragmentManager();
Button showMapButton = (Button) findViewById(R.id.showMapButton);
showMapButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
loadMapFragment();
}
});
}
private void loadMapFragment() {
MapPageFragment plotterFragment = new MapPageFragment();
FragmentTransaction ft = fManager.beginTransaction();
ft.replace(R.id.allFragmentsFrameLayout, plotterFragment);
ft.addToBackStack(null);
ft.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
主活动布局文件
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" …Run Code Online (Sandbox Code Playgroud) maps android google-maps-api-2 android-fragments supportmapfragment
以下是我如何启动原生谷歌地图应用以显示我和目标位置之间的路线.
String url = "http://maps.google.com/maps?saddr="+currentLattitude+","+currentLongitude+"&daddr="+targetLat+","+targetLang;
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(url));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
有没有办法启动原生地图应用程序来显示驾驶和运输模式?(目前仅展示行走方向)
对于我正在进行的一个小项目,我需要能够在leaflet.js驱动的图像映射上放置一个标记并更新该标记的位置(如果它被拖动).我使用以下代码试试这个,但它失败了.我收到错误'标记未定义'.我不知道为什么它不起作用 - 也许你们可以帮助我?;)
function onMapClick(e) {
gib_uni();
marker = new L.marker(e.latlng, {id:uni, icon:redIcon, draggable:'true'};
map.addLayer(marker);
};
marker.on('dragend', function(event){
var marker = event.target;
var position = marker.getLatLng();
alert(position);
marker.setLatLng([position],{id:uni,draggable:'true'}).bindPopup(position).update();
});
Run Code Online (Sandbox Code Playgroud) 我已经在react-native中创建了地图,参考https://github.com/lelandrichardson/react-native-maps 地图已创建,但我想使用gps检测自动位置.以下是使用静态纬度和经度渲染地图的代码.这是我更新的代码.但它仍然没有呈现完美的位置
getInitialState() {
return {
initialPosition: 'unknown',
lastPosition: 'unknown',
};
},
componentDidMount() {
navigator.geolocation.getCurrentPosition(
(position) => {
var initialPosition = JSON.stringify(position);
this.setState({initialPosition});
},
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
);
this.watchID = navigator.geolocation.watchPosition((position) => {
var lastPosition = JSON.stringify(position);
this.setState({lastPosition});
});
},
componentWillUnmount() {
navigator.geolocation.clearWatch(this.watchID);
},
render() {
return (
<View style={styles.container}>
<MapView
ref="map"
mapType="terrain"
style={styles.map}
initialPosition={this.state.initialPosition}
lastPosition={this.state.lastPosition}
>
</MapView>
</View>
Run Code Online (Sandbox Code Playgroud)
你能纠正吗?
提前致谢
我尝试了以下代码:
library(ggplot2)
library(ggmap)
library(sf)
nc <- st_read(system.file("shape/nc.shp", package = "sf"))
str(nc)
Classes ‘sf’ and 'data.frame': 100 obs. of 15 variables:
$ AREA : num 0.114 0.061 0.143 0.07 0.153 0.097 0.062 0.091 0.118 0.124 ...
$ PERIMETER: num 1.44 1.23 1.63 2.97 2.21 ...
$ CNTY_ : num 1825 1827 1828 1831 1832 ...
$ CNTY_ID : num 1825 1827 1828 1831 1832 ...
$ NAME : Factor w/ 100 levels "Alamance","Alexander",..: 5 3 86 27 66 46 15 37 …Run Code Online (Sandbox Code Playgroud) 我在墨尔本有一个小区域的Lat/Long值; -37.803134,145.132377以及我从openstreet地图(Osmarender Image)导出的平面图像.图像宽度:1018,高度:916
我希望能够使用C++将Lat/Long转换为X,Y坐标,其中点将反映位置.
我使用了我在网上找到的各种公式,如下所示,但没有任何帮助.
var y = ((-1 * lat) + 90) * (MAP_HEIGHT / 180);
var x = (lon + 180) * (MAP_WIDTH / 360);
Run Code Online (Sandbox Code Playgroud)
如果任何人给我清楚解释如何做到这一点将是非常有帮助的.任何代码将非常感激.
我试图首次使用Google Maps API v2重新启动并运行我的某个应用.我在我的密钥库中为我的应用程序创建了一个密钥,提取了SHA1哈希,获取了一个API密钥,然后在应用程序中执行了以下操作...我包括:
谷歌播放,services.jar
以及导入GooglePlayServices库并将其添加为项目的参考.在我的Java代码中,我只需加载布局资源.
public class Times extends Activity{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
}
}
Run Code Online (Sandbox Code Playgroud)
在我试图实例化的布局(res/layout/map.xml)中,我有:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Run Code Online (Sandbox Code Playgroud)
我的清单中还声明了以下内容:
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="tinyTech.us.ua.busschedule.permission.MAPS_RECEIVE" />
<permission
android:name="tinyTech.us.ua.busschedule.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
Run Code Online (Sandbox Code Playgroud)
并在清单的Application标签中声明:
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="My_API_Key" />
Run Code Online (Sandbox Code Playgroud)
加载活动时,它会在LogCat中因以下错误而崩溃:
FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我试图研究这个问题,但是我无法找到我想要的东西.非常感谢任何和所有的帮助.
我是新手leaflet.js.有人可以帮我调试以下代码吗?我试图在屏幕上显示地图,但只有放大和缩小按钮显示在Google Chrome上,地图屏幕显示为空.
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css" />
<style>
#mapid { height: 180px; }
</style>
</head>
<body>
<div id="mapid"></div>
<script src="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js"></script>
<script>
var mymap = L.map('mapid').setView([51.505, -0.09], 13);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) maps ×10
android ×5
ggplot2 ×2
google-maps ×2
javascript ×2
leaflet ×2
r ×2
c++ ×1
coordinates ×1
ggmap ×1
google-api ×1
gps ×1
jquery ×1
marker ×1
r-sf ×1
react-native ×1