POST
|
Hello All, I'm trying to do a batch geocode, then write the results to a CSV file with the lat and long column added on. Everything works fine, but the final written result to the CSV file is mixed up causing different XY values to be added to the wrong address. I'm following this YT video: https://www.youtube.com/watch?v=ZbOD8mrX3c8 Please see attached code and screenshots. Python 3.9.16 shipped with ArcPro 3.2 Any help or idea as to why this is happening? Thanks in advanced. Python Terminal results CSV file output result - does not match what's in the terminal code: import pandas as pd
from arcgis.gis import GIS
from arcgis.geocoding import get_geocoders, batch_geocode, geocode, Geocoder
gis = GIS("https://arcgis.com","user","password")
print(gis.properties.user.role)
GeocodeURL = "https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"
orgGeoCoder = Geocoder(GeocodeURL, gis)
input_file = "C:\\Users\\temp\\coffeeshops.csv"
output_file = "C:\\Users\\temp\\coffeeshops_coded.csv"
address_column_name = "Address"
data = pd.read_csv(input_file, encoding='utf8')
print(data.head(20))
if address_column_name not in data.columns:
raise ValueError("Missing Address column in input data")
addresses = (data[address_column_name]+", " + data['City'] + ", " + data['State']).tolist()
results = batch_geocode(addresses=addresses, geocoder=orgGeoCoder)
latcoords = []
longcoords = []
for coordinates in results:
print("Score "+ str(coordinates['score']) + " : " + coordinates['address'] + " " + str(coordinates['location']))
latitude = coordinates['location']['y']
longitude = coordinates['location']['x']
latcoords.append(latitude)
longcoords.append(longitude)
data['Long']=longcoords
data['Lat']=latcoords
pd.DataFrame(data).to_csv(output_file, encoding='utf8')
print("done")
... View more
04-27-2024
12:54 AM
|
0
|
1
|
412
|
POST
|
I have found the answer. I just have to adjust the parameter of the FC map service in ArcGIS Server to allow more than 1000 records to return when query.
... View more
11-02-2023
12:26 PM
|
0
|
0
|
315
|
POST
|
Hello everyone. Does the web appbuilder Filter Widget have a limitation on how many records/rows to display? I have a FC of over 5000 records of names and after applied it to the Filter Widget in the drop down list, it is only showing alphabetically up to "E", which is around 300 records/names. Anything after "E" is not showing. Thanks in advance for any comments/help.
... View more
11-01-2023
11:56 AM
|
0
|
1
|
338
|
POST
|
Hello all, just have a few questions, if you guys can help much is appreciated. I wanted to see if it's possible the create a map service, then publish it to ArcGIS Server without creating an .mxd file using Python/Arcpy? script pseudo: - connect to db - grab the fc/table - load said fc/table to map document, set parameters i.e. don't show zoom beyond 1:1,000,000 - use CreateMapSDdraft to create sddraft from said fc/table - analyze the sddraft file - then publish the sddraft file with ArcPy UploadServiceDefinitionserver Would the above workflow be possible without needing to create a .mxd and saving it in a file directory?
... View more
12-02-2022
09:08 PM
|
1
|
1
|
404
|
POST
|
Hello all, I came across an issue when I recently upgrade to v4.22 from v4.12 . In v4.12 when I click on a point I was able to console.log out the information/attributes of all the fields. But since upgrade to v4.22, the console.log only output 1 field and that is the ID field, other fields did not get printed out. Not sure what have changed in the API that causes my problem, thanks in advance for any help. <html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Graphic HitTest</title>
<style>
#mapViewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.22/esri/css/main.css">
<script src="https://js.arcgis.com/4.22/"></script>
<script>
require([
"esri/Map",
"esri/views/MapView",
"esri/Graphic",
"esri/layers/GraphicsLayer",
"esri/layers/FeatureLayer",
"esri/geometry/Point"
], function(Map, MapView, Graphic, GraphicsLayer, FeatureLayer, Point) {
let graphicArray = [];
let featureLayer;
let simpleRenderer = {
type: "simple",
symbol: {
type: "simple-marker",
style: "circle",
color: [226, 119, 240],
outline: {
color: [0, 0, 0],
width: 1
}
}
};
let map = new Map({
basemap: "gray-vector"
});
let view = new MapView({
container: "mapViewDiv",
map: map,
center: [-90.674, 36.729],
zoom: 10
});
let ptData = [{"id":0,"lat": "36.7239","long":"-90.67514"},
{"id":1,"lat": "36.72839","long":"-90.6764"},
{"id":2,"lat": "36.74339","long":"-90.6674"},
{"id":3,"lat": "36.79336","long":"-90.62574"},
{"id":4,"lat": "36.72739","long":"-90.674"},
{"id":5,"lat": "36.78639","long":"-90.6654"},
{"id":6,"lat": "36.72366","long":"-90.6734"},
{"id":7,"lat": "36.76369","long":"-90.6644"},
{"id":8,"lat": "36.7276","long":"-90.6784"},
{"id":9,"lat": "36.7238","long":"-90.6714"},
{"id":10,"lat": "36.7233","long":"-90.6574"}];
view.when().then(function(){
for(let i = 0; i< ptData.length; i++){
let point = {
type: "point",
longitude: ptData[i].long,
latitude: ptData[i].lat
};
let pointGraphic = new Graphic({
geometry: point,
attributes: {
"id": ptData[i].id,
"latCoord": ptData[i].lat,
"longCoord": ptData[i].long,
},
symbol: simpleRenderer.symbol
});
graphicArray.push(pointGraphic);
}
featureLayer = new FeatureLayer({
fields: [{name: "id",alias: "id",type: "oid"},
{name: "latCoord",alias: "latCoord",type: "string"},
{name: "longCoord",alias: "longCoord",type: "string"}],
objectIdField: "id",
geometryType: "point",
spatialReference: { wkid: 4326 },
source: graphicArray,
renderer: simpleRenderer
});
map.add(featureLayer);
});
view.on("click", function (event) {
view.hitTest(event).then(function (response) {
if (response.results.length) {
let graphic = response.results.filter(function (result) {
return result.graphic.layer === featureLayer;
})[0].graphic;
console.log("Output ",graphic.attributes);
}
});
});
});
</script>
</head>
<body>
<div id="mapViewDiv"></div>
</body>
</html>
... View more
12-26-2021
09:26 PM
|
0
|
1
|
848
|
POST
|
Hello all, Looking for ways to stop the flashing of color while inside of a feature when hover over it. Mouse pointer over the feature, it changes color, but then if I move the mouse pointer/cursor while still inside of the feature it flashes. It looks like its restarting the change of the graphic color over and over again. Is there to just persist the color when hovering over the feature without it flashing? Thanks. Below is the sample code. <html>
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="initial-scale=1,maximum-scale=1,user-scalable=no"
/>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link
rel="stylesheet"
href="https://js.arcgis.com/4.20/esri/themes/light/main.css"
/>
<script src="https://js.arcgis.com/4.20/"></script>
<script>
require(["esri/Map", "esri/views/MapView", "esri/layers/FeatureLayer"], (Map, MapView, FeatureLayer) => {
const markerSym = {
type: "simple",
symbol:{
type: "simple-marker",
style: "circle",
color: [108, 199, 143],
size: 11,
outline: {
color: "blue",
width: 1
}
}
};
const brewLayer = new FeatureLayer({
url: "https://services.arcgis.com/V6ZHFr6zdgNZuVG0/ArcGIS/rest/services/BreweriesCA/FeatureServer/0",
renderer: markerSym,
visible: true
})
let map = new Map({
basemap: "topo-vector",
layers: brewLayer
});
let view = new MapView({
container: "viewDiv",
map: map,
zoom: 8,
center: [-116.1118, 33.17233]
});
view.when(() => {
view.on("pointer-move", evt => {
view.graphics.removeAll();
view.hitTest(evt).then(response => {
if (response.results.length > 0 ) {
let graphic = response.results[0].graphic;
graphic.symbol = {
type: "simple-marker",
style: "circle",
color: [25, 97, 73],
size: 11,
outline:
{
color: "white",
width: 1
}
}
view.graphics.add(graphic);
}
})
});
})
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
... View more
07-12-2021
12:10 PM
|
0
|
2
|
1119
|
POST
|
Hello, Just a quick question in regards to layer's definitionExpression, have been searching for a little bit but haven't come across it. Is there a way to display how many features gets to be rendered based on the zoom scale or LOD? example; set definitionExpression = 'active' at the start of the map load 1:1,000,000, as users zoom in further to 1:500,000 definitionExpression in ('inactive','active'), and so on so forth. TIA.!
... View more
09-01-2020
09:32 AM
|
0
|
2
|
594
|
POST
|
Hello everyone! I'd put together some code below to see if I can change the mouse cursor into a hand Only when hover over the feature. It only work when I remove the basemap( comment it out). If not comment out the basemap (line 71) when instantiating the Map object, the hand cursor appear everywhere, even when not hovering over the feature. Any advice on how to get the hand cursor to appear Only when hovering over the point feature? TIA! <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="initial-scale=1,maximum-scale=1,user-scalable=no"
/>
<title>GeoJSONLayer - 4.14</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link
rel="stylesheet"
href="https://js.arcgis.com/4.14/esri/themes/light/main.css"
/>
<script src="https://js.arcgis.com/4.14/"></script>
<script>
require([
"esri/Map",
"esri/layers/GeoJSONLayer",
"esri/views/MapView",
"esri/core/watchUtils"
], function(Map, GeoJSONLayer, MapView, watchUtils) {
const url = "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson";
const template = {
title: "Earthquake Info",
content: "Magnitude {mag} {type} hit {place} on {time}",
fieldInfos: [
{
fieldName: "time",
format: {
dateFormat: "short-date-short-time"
}
}
]
};
const renderer = {
type: "simple",
field: "applicant_id",
symbol: {
type: "simple-marker",
color: "orange",
size: 10,
outline: {
color: "white"
}
}
};
const geojsonLayer = new GeoJSONLayer({
url: url,
copyright: "USGS Earthquakes",
popupTemplate: template,
renderer: renderer //optional
});
const map = new Map({
basemap: "gray-vector",
layers: [geojsonLayer]
});
const view = new MapView({
container: "viewDiv",
center: [-123.718273, 45.309011],
zoom: 8,
map: map
});
function changeMouseCursor(response)
{
if (response.results.length > 0) {
document.getElementById("viewDiv").style.cursor = "pointer";
} else {
document.getElementById("viewDiv").style.cursor = "default";
}
}
function getNewGraphics(response) {
view.graphics.removeAll();
if (response.results.length > 0) {
var graphic = response.results[0].graphic;
graphic.symbol =
{
type: "simple-marker",
style: "circle",
color: [ 17, 114, 212, 0.3 ],
outline:
{ // autocasts as new SimpleLineSymbol()
color: "blue",
width: 2
}
}
view.graphics.add(graphic);
}
}
view.when(function () {
view.whenLayerView(geojsonLayer).then(function (lview) {
watchUtils.whenFalseOnce(lview, "updating", function () {
// Set up a click event handler and retrieve the screen x, y coordinates
view.on("pointer-move", function (evt) {
var screenPoint = {
x: evt.x,
y: evt.y
};
view.hitTest(screenPoint)
.then(function (response) {
changeMouseCursor(response);
getNewGraphics(response);
});
});
});
});
});
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
... View more
03-04-2020
10:08 PM
|
0
|
2
|
5380
|
POST
|
Thanks Noah for your response. Below is the code that I come up with esri/request. Instead of class breaks, I'm changing it to unique-value to be easier. It pulled out the data values correctly(see console.log). But the layer will not render the colors because of the renderer: property in the new Featurelayer class. The renderer property doesn't see the needed value from the esri/request, because inside of the esri/request it a promise().then and it doesn't return the value right away. So any idea how to resolve this, or any help would welcome. Thanks. <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no"/>
<title>Map Color Render</title>
<link
rel="stylesheet"
href="https://js.arcgis.com/4.13/esri/themes/light/main.css"
/>
<script src="https://js.arcgis.com/4.13/"></script>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<script>
var someArray = [];
var tinyNum;
var smallNum;
var mediumNum;
var largeNum;
var behemothNum;
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/FeatureLayer",
"esri/widgets/Legend",
'esri/request'
], function(Map, MapView, FeatureLayer, Legend,esriRequest) {
let serviceURL = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3";
let queryOptions = {
responseType: "json",
query:{
f: "json",
where: "OBJECTID IN (7,6,32,34,16)",
outFields: "*",
returnGeometry: false
}
}
esriRequest(serviceURL+"/query", queryOptions).then(response =>{
for(let i = 0; i< 5; i++)
{
someArray.push(response.data.features[i].attributes.POP2000);
//someArray.sort();
console.log(response.data.features[i].attributes.STATE_NAME +" Pop: "+response.data.features[i].attributes.POP2000);
}
someArray.sort((n1,n2) => n1-n2);
tinyNum = someArray[0];
smallNum = someArray[1];
mediumNum = someArray[2];
largeNum = someArray[3];
behemothNum = someArray[4];
for(let i =0; i< someArray.length; i++)
{
console.log(i+1+": "+someArray[i]);
}
});
const lightestColor = {
type: "simple-fill",
color: "#fffcd4",
style: "solid",
outline: {
width: 1,
color: [255, 255, 255]
}
};
const lightColor = {
type: "simple-fill",
color: "#b1cdc2",
style: "solid",
outline: {
width: 1,
color: [255, 255, 255]
}
};
const mediumColor = {
type: "simple-fill",
color: "#38627a",
style: "solid",
outline: {
width: 1,
color: [255, 255, 255]
}
};
const darkColor = {
type: "simple-fill",
color: "#0d2644",
style: "solid",
outline: {
width: 1,
color: [255, 255, 255]
}
};
const darkestColor = {
type: "simple-fill",
color: "#010812",
style: "solid",
outline: {
width: 1,
color: [255, 255, 255]
}
};
renderer = {
type: "unique-value",
field: "obligated_amt",
defaultSymbol: {
type: "simple-fill",
color: "black",
style: "cross",
outline: {
width: 0.5,
color: [50, 50, 50, 0.6]
}
},
defaultLabel: "No Data Available",
uniqueValueInfos:[
{
value: tinyNum,
symbol: lightestColor
},
{
value: smallNum,
symbol: lightColor
},
{
value: mediumNum,
symbol: mediumColor
},
{
value: largeNum,
symbol: darkColor
},
{
value: behemothNum,
symbol: darkestColor
},
]
};
const fLayer = new FeatureLayer({
url:"https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3",
outFields: ["*"],
renderer: renderer
});
const map = new Map({
basemap: "gray-vector",
layers: [fLayer]
});
const view = new MapView({
container: "viewDiv",
map: map,
center: [-98.34, 40.28],
zoom: 4
});
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
... View more
11-24-2019
11:12 PM
|
0
|
0
|
999
|
POST
|
Hello, I'm trying to get the result from a query and pass it out to a global variable and do something with it outside of the require(). Is it possible to do so? The current code that I put together from various sources does not work, please any help or advice would be tremendous. Thanks. <html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<title>ArcGIS JavaScript Tutorials: Create a Starter App</title>
<style>
html, body, #viewDiv {
padding: 0;
margin: 0;
height: 90%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.13/esri/css/main.css">
<script src="https://js.arcgis.com/4.13/"></script>
<script>
var fAttribute; //global variable
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/FeatureLayer",
"esri/layers/GraphicsLayer",
"esri/Graphic"
], function(Map, MapView, FeatureLayer, GraphicsLayer, Graphic)
{
var map = new Map({
basemap: "topo-vector"
});
var featureLayer = new FeatureLayer({
url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trailheads_Styled/FeatureServer/0",
});
var graphicsLayer = new GraphicsLayer();
map.add(featureLayer);
var view = new MapView({
container: "viewDiv",
map: map,
center: [-118.80500,34.02700],
zoom: 13
});
function QueryParkName(featureLayer)
{
var query = featureLayer.createQuery();
query.where = "TRL_NAME = 'Glade Trail - Topanga'";
query.outFields = ["*"];
featureLayer.queryFeatures(query).then(function(response)
{
fAttribute = response.features[0].attributes.PARK_NAME;
console.log("Result: "+fAttribute); //display correctly
});
}
QueryParkName(featureLayer);
console.log("Result Outside of QueryParkName: "+fAttribute); //display undefined
})
function DisplayName()
{
console.log("Park Name: "+fAttribute); //display undefined.
}
DisplayName();
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
... View more
11-11-2019
04:18 PM
|
0
|
1
|
763
|
POST
|
Hello All, So far, I've successfully rendered class breaks colors on the client side with various help from the API resource page. While this is great to start off, but I do see a problem. Currently the Min. and Max value for each class is hardcoded in from the feature layer REST url, and that is not good if you have a feature layer that is updating daily or weekly with new values in the attribute. Is there any way or methods that would allow us to capture the feature layer attributes dynamically through code and put it in a variable? So then it would be really easy to put those variables in place of the Min. and Max value for each class break. Below is the code that I have so far with the hardcoded Min. and Max value, thank you for your help. <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no"/>
<title>Class Break Color Render</title>
<link
rel="stylesheet"
href="https://js.arcgis.com/4.13/esri/themes/light/main.css"
/>
<script src="https://js.arcgis.com/4.13/"></script>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<script>
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/FeatureLayer",
"esri/widgets/Legend"
], function(Map, MapView, FeatureLayer, Legend) {
const lightestColor = {
type: "simple-fill", // autocasts as new SimpleFillSymbol()
color: "#fffcd4",
style: "solid",
outline: {
width: 1,
color: [0, 0, 0]
}
};
const lightColor = {
type: "simple-fill", // autocasts as new SimpleFillSymbol()
color: "#b1cdc2",
style: "solid",
outline: {
width: 1,
color: [0, 0, 0]
}
};
const mediumColor = {
type: "simple-fill", // autocasts as new SimpleFillSymbol()
color: "#38627a",
style: "solid",
outline: {
width: 1,
color: [0, 0, 0]
}
};
const darkColor = {
type: "simple-fill", // autocasts as new SimpleFillSymbol()
color: "#0d2644",
style: "solid",
outline: {
width: 1,
color: [0, 0, 0]
}
};
var minNumber = 100000;
var maxNumber = 7000000;
const renderer = {
type: "class-breaks",
field: "OWNER_OCC",
legendOptions: {
title: "Number of Home Owner"
},
defaultSymbol: {
type: "simple-fill",
color: "black",
style: "cross",
outline: {
width: 0.5,
color: [50, 50, 50, 0.6]
}
},
defaultLabel: "No Data Available",
classBreakInfos: [
{
minValue: minNumber,
maxValue: 1000000,
symbol: lightestColor,
label: "< 1,000,000"
},
{
minValue: 1000001,
maxValue: 3000000,
symbol: lightColor,
label: "1,000,001 to 3,000,000"
},
{
minValue: 3000001,
maxValue: 5000000,
symbol: mediumColor,
label: "3,000,001 to 5,000,000"
},
{
minValue: 5000001,
maxValue: maxNumber,
symbol: darkColor,
label: "5,000,001 to " + maxNumber.toLocaleString()
}
]
};
const fLayer = new FeatureLayer({
url:
"https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3",
title: "U.S. Homeowner Number",
renderer: renderer,
popupTemplate: {
title: "Owner Occupancy for {STATE_NAME}",
content:
"{OWNER_OCC} are home owner. " +
"{RENTER_OCC} are home renter"
}
});
const map = new Map({
basemap: "gray-vector",
layers: [fLayer]
});
const view = new MapView({
container: "viewDiv",
map: map,
center: [-98.34, 40.28],
zoom: 4
});
const legend = new Legend({
view: view
});
view.ui.add(legend, "bottom-right");
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
... View more
11-05-2019
10:07 PM
|
0
|
2
|
1188
|
POST
|
Hello all, I'm having trouble creating point graphic on a map from input values box. Below are the code that I have. I'm trying to get the lat and long values that is entered to plot on the map after the button is clicked. Any help on how to get the global input values into the require() to generate the point graphic would be appreciated. Thanks, <html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Create Point Graphic</title>
<style>
#viewDiv {
padding: 0;
margin: 0;
height: 600px;
width: 100%;
}
#getInput{
margin-left: 100px;
height: 100px;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.12/esri/css/main.css">
<script src="https://js.arcgis.com/4.12/"></script>
<script>
var longi = -96.867;
var lati = 40.228;
var lontest;
var lattest;
function plotPoint()
{
lontest = document.getElementById("longInput").value;
lattest = document.getElementById("latInput").value;
alert("Long: "+lontest +" Lat: "+lattest);
}
require([
"esri/Map",
"esri/views/MapView",
"esri/Graphic",
"esri/layers/GraphicsLayer"
], function(Map, MapView, Graphic, GraphicsLayer)
{
var map = new Map({
basemap: "topo-vector"
});
var view = new MapView({
container: "viewDiv",
map: map,
center: [-96.8670, 40.228],
zoom: 6
});
var graphicsLayer = new GraphicsLayer();
map.add(graphicsLayer);
// Create a point
var point = {
type: "point",
longitude: lontest ,
latitude: lattest
};
var simpleMarkerSymbol = {
type: "simple-marker",
color: [226, 119, 40], // orange
outline: {
color: [12, 137, 148],
width: 1
}
};
var pointGraphic = new Graphic({
geometry: point,
symbol: simpleMarkerSymbol
});
graphicsLayer.add(pointGraphic);
});
</script>
</head>
<body>
<div id="getInput">
Latitude:<br>
<input id="latInput" type="text" name="latpoint">
<br>
Longitude:<br>
<input id="longInput" type="text" name="longpoint">
<button onclick="plotPoint()"> Click Me</button>
</div>
<div id="viewDiv"></div>
</body>
</html>
... View more
10-17-2019
09:18 PM
|
0
|
1
|
765
|
POST
|
Thanks Tate, I was able to get the click event to pull out attributes. I edit the above V4 code with the new code. Now on to the hovering and border outline, still can't seem to get that working though.
... View more
08-20-2019
07:19 PM
|
0
|
0
|
663
|
Title | Kudos | Posted |
---|---|---|
1 | 12-02-2022 09:08 PM | |
1 | 06-12-2019 06:33 PM | |
1 | 07-01-2019 10:42 PM | |
1 | 06-08-2019 05:36 PM |
Online Status |
Offline
|
Date Last Visited |
04-27-2024
12:57 AM
|